Descomponiendo y almacenando en una base de datos relacional

Recapitulemos: hemos decidido definir nuestra información en forma de clases y objetos, para mayor comodidad a la hora de programar. Además, queremos almacenarla en una base de datos relacional. Si también hemos decidido descomponer la información —en forma de array frozen—, entonces necesitamos un esquema relacional para guardarla en la base de datos:

Esquema de base de datos para almacenar objetos congelados

Este esquema presenta dos ventajas principales con respecto a los ORM: por una parte las propiedades dinámicas son almacenadas fácilmente, ya que se guardan en vertical —como registros— en vez de en horizontal —como campos—. Por la otra, el tipado variable también es soportado, ya que todas las propiedades se guardan como cadenas (properties.value), al mismo tiempo que se guarda el tipo que tenían en el momento de la congelación del objeto (properties.type). En resumen, el esquema ha sido diseñado para soportar única y exclusivamente información en forma de array "frozen object".

En lo que a programación se refiere, hemos dividido el motor de persistencia en dos clases principales: el motor de persistencia (que hereda de Object_Freezer_Storage) y las implementaciones particulares para cada DBMS (de momento sólo está escrita la de MySQL). Esta arquitectura nos permite escribir fácilmente implementaciones específicas para Oracle, PostgreSQL, etc con únicamente adaptar algunas sentencias SQL.